/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DA;
import javax.swing.JOptionPane;
import BE.*;
import java.sql.*;
import java.util.*;

/**
 *
 * @author alejandro
 */
public class DAEmpleado {
    
    public int agregarEmpleado (BEEmpleado empleado)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        PreparedStatement s = null;
        String query = "INSERT INTO PERSONA (NOMBRE,APEPATERNO," +
                "APEMATERNO,IDTIPODOCUMENTO,NROTIPODOCUMENTO,TELEFONO,DIRECCION,FECHANACIMIENTO,EMAIL,ESTADO) VALUES ('"+
                empleado.getNombre()+ "','" + empleado.getApePaterno() + "','" +  empleado.getApeMaterno()  +"',"+
                empleado.getTipoDocumento()+","+empleado.getNroDocumento() + "," +empleado.getTelefono() +",'"+ empleado.getDireccion()+"','"+
                empleado.getFechaNacimiento()+"','"+ empleado.getEmail()+ "','ACTIVO')";
        
        String query2 = "INSERT INTO EMPLEADO (IDEMPLEADO,IDUSUARIO,CARGO,FECHAINGRESO" +
                "       ) VALUES ((SELECT MAX(IDPERSONA) FROM PERSONA), null,'"+ empleado.getCargo()+"','"+
                empleado.getFechaIngreso()+"')";

        try
        {
           con = bd.conectar();
            s = con.prepareStatement(query);
            s.executeUpdate();
            s = con.prepareStatement(query2);
            s.executeUpdate();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de insertar datos",
                        "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }

        bd.cierraConexion(con);
        return 0;
    }
    
    public ResultSet buscarContacto(BEEmpleado empleado, int tipoBusqueda)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        ResultSet rs = null;
        Statement s = null;
        //String query = null;
        String query = "SELECT * FROM EMPLEADO e, PERSONA p, TIPODOCUMENTO d WHERE  e.IDEMPLEADO = p.IDPERSONA and"+
                " d.IDTIPODOCUMENTO=p.IDTIPODOCUMENTO ";
                        
        if(!"".equals(empleado.getCargo()))
                query+= " AND CARGO LIKE '%" +empleado.getCargo() + "%'";
        
        if(!"".equals(empleado.getNombre()))
               query+= " AND p.NOMBRE LIKE '%"+empleado.getNombre() + "%'";
              
        if(!"".equals(empleado.getApePaterno()))
              query+=" AND p.APEPATERNO LIKE '%" +empleado.getApePaterno() + "%'";
        
        if(!"".equals(empleado.getApeMaterno()))
              query+=" AND p.APEMATERNO LIKE '%" +empleado.getApeMaterno() + "%'";
        
        if(!"TODOS".equals(empleado.getEstado()))
              query+=" AND p.ESTADO LIKE '" +empleado.getEstado() + "%'";        
        
        if (empleado.getNroDocumento() > 0)
            query += " AND p.NROTIPODOCUMENTO = " + empleado.getNroDocumento();
        
        if (empleado.getIdPersona() > 0)
            query += " AND e.IDEMPLEADO = " + empleado.getIdPersona();
              
        //if (tipoBusqueda == 1 ) //busqueda de todos los datos
          //   query = "SELECT * FROM CONTACTO";

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }
        bd.cierraConexion(con);
        return rs;
    }
    
    public BEEmpleado getEmpleadobyId (int idIProd)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEEmpleado empleado = null;
        String query = "SELECT * FROM EMPLEADO e, PERSONA p WHERE p.IDPERSONA = " + idIProd +
                " AND p.IDPERSONA=e.IDEMPLEADO";

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            rs.next();
            empleado = new BEEmpleado();
            
            empleado.setIdPersona(rs.getInt("IDPERSONA"));
            empleado.setCargo(rs.getString("CARGO"));
            empleado.setNombre(rs.getString("NOMBRE"));
            empleado.setApePaterno(rs.getString("APEPATERNO"));
            empleado.setApeMaterno(rs.getString("APEMATERNO"));
            empleado.setDireccion(rs.getString("DIRECCION"));
            empleado.setNroDocumento(rs.getInt("NROTIPODOCUMENTO"));
            empleado.setEmail(rs.getString("EMAIL"));
            empleado.setFechaNacimiento(rs.getDate("FECHANACIMIENTO"));
            empleado.setFechaIngreso(rs.getDate("FECHAINGRESO"));
            empleado.setTelefono(rs.getInt("TELEFONO"));
            
            
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener el empleado",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return empleado;
    }
    
  public int eliminarEmpleado (int idEmpleado)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE PERSONA SET ESTADO = 'INACTIVO' WHERE IDPERSONA = " + idEmpleado;
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de borrar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }
        bd.cierraConexion(con);
        return 0;
    }
    
    public int modificaEmpleado (BEEmpleado empleado)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        String query = "UPDATE EMPLEADO SET CARGO = '" + empleado.getCargo() +
                "', FECHAINGRESO = '" + empleado.getFechaIngreso() + "' WHERE " +
                "IDEMPLEADO = " + empleado.getIdPersona();
        
        String query2 = "UPDATE PERSONA SET NOMBRE = '" + empleado.getNombre() +
                "', APEPATERNO = '" + empleado.getApePaterno() + "', APEMATERNO = '" +
                empleado.getApeMaterno()+"', NROTIPODOCUMENTO = " + empleado.getNroDocumento()+", TELEFONO ="+
                empleado.getTelefono()+", DIRECCION='"+empleado.getDireccion()+"', EMAIL='"+
                empleado.getEmail()+"', FECHANACIMIENTO='"+empleado.getFechaNacimiento()+"' WHERE "+
                "IDPERSONA = " +empleado.getIdPersona();

        try
        {
            
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query);
              
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de acutializar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }
        
        try
        {
            con = bd.conectar();
            s = con.createStatement();
            s.executeUpdate(query2);
          
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problemas al momento de acutializar datos","Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return 1;
        }
        bd.cierraConexion(con);
        return 0;
    }
    
    public void agregarUsuarioAEmpleado(BEEmpleado ojbEmpleado)
    {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        ArrayList<BEUsuario> usuarios = new ArrayList<BEUsuario>();
        String query = "UPDATE empleado  SET  idusuario=? WHERE idempleado=?";
        try
        {
            con = bd.conectar();
            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1,ojbEmpleado.getIdUsuario());
            p.setInt(2, ojbEmpleado.getIdPersona());
            p.execute();

        }
        catch (Exception e)
        {
            JOptionPane.showMessageDialog(null,"Error al obtener los Usuarios:"+e.toString(),
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            
        }

        bd.cierraConexion(con);
        
    }

    public BEEmpleado getEmpleadobyIdUsr(int idUsuario) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;

        BEEmpleado empleado = null;
        String query = "SELECT * FROM EMPLEADO e, PERSONA p WHERE e.idusuario = " + idUsuario +
                " AND p.IDPERSONA=e.IDEMPLEADO";

        try
        {
            con = bd.conectar();
            s = con.createStatement();
            rs = s.executeQuery(query);

            while(rs.next())
            {
                    empleado = new BEEmpleado();

                    empleado.setIdEmpleado(rs.getInt("idempleado"));
                    empleado.setIdPersona(rs.getInt("IDPERSONA"));
                    empleado.setCargo(rs.getString("CARGO"));
                    empleado.setNombre(rs.getString("NOMBRE"));
                    empleado.setApePaterno(rs.getString("APEPATERNO"));
                    empleado.setApeMaterno(rs.getString("APEMATERNO"));
                    empleado.setDireccion(rs.getString("DIRECCION"));
                    empleado.setNroDocumento(rs.getInt("NROTIPODOCUMENTO"));
                    empleado.setEmail(rs.getString("EMAIL"));
                    empleado.setFechaNacimiento(rs.getDate("FECHANACIMIENTO"));
                    empleado.setFechaIngreso(rs.getDate("FECHAINGRESO"));
                    empleado.setTelefono(rs.getInt("TELEFONO"));
                    empleado.setIdUsuario(rs.getInt("idusuario"));
            }
            
        }
        catch (Exception e)
        {
          JOptionPane.showMessageDialog(null,"Error al obtener el empleado",
                                          "Error",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return null;
        }

        bd.cierraConexion(con);
        return empleado;
    }

    public boolean tieneUsuarioAsignado(BEEmpleado empleado) {
        DAConexion bd = new DAConexion();
        Connection con = null;
        Statement s = null;
        ResultSet rs = null;
        boolean resultado=true;
        
        try
        {
            //guardo los datos del perfil

            con = bd.conectar();
            //JOptionPane.showMessageDialog(null,"Hola mundo","Error",JOptionPane.ERROR_MESSAGE);
            String query = "select count(idusuario) from empleado where idempleado=?";

            PreparedStatement p=con.prepareStatement(query);
            p.setInt(1, empleado.getIdEmpleado());
                                  
            rs=p.executeQuery();
            
            while (rs.next())
            {
                resultado=(rs.getInt(1)>=1);
            }
            
            bd.cierraConexion(con);
            
            return resultado;
            
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null,"Problema al consultar la base de datos"+e.toString(),"Actualizacion de estado de Usuarios",JOptionPane.ERROR_MESSAGE);
            bd.cierraConexion(con);
            return resultado;
            
        }
        
    }
}
